#include <stdlib.h>
#include <string>

/**
 * （1）可变参数（Variadic Arguments）是C++11引入的一种特性，允许函数接受任意数量和类型的参数
 *  typename... Args：定义了一个参数包（parameter pack），表示任意数量的类型
 *  Args &&...arg：定义了对应的实际参数包，使用了完美转发（perfect forwarding）
 *  arg...：参数包展开，将参数逐个传递给函数
 * 
 * （2）完美转发（Perfect Forwarding）
 *  是C++11引入的重要特性，主要作用是在模板函数中将参数原封不动地转发给另一个函数，保持参数的原始类型和值类别
 *  
 */


template <typename... Args>
static std::string STR_Format(const char *fmt, Args &&...arg)
{
    char *ptr_out = nullptr;
    if (asprintf(&ptr_out, fmt, arg...) > 0 && ptr_out)
    {
        std::string ret(ptr_out);
        free(ptr_out);
        return ret;
    }
    return "";
}
template <typename... Args>
static std::string STR_Format(const std::string &fmt, Args &&...args)
{
    return STR_Format(fmt.data(), std::forward<Args>(args)...);
}


int main()
{

}